package com.relytosoft.mizar.analyze.face.services.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.relytosoft.dubhe.common.core.base.page.PageQuery;
import com.relytosoft.mizar.analyze.face.api.entity.AyFaceDisposition;
import com.relytosoft.mizar.analyze.face.api.pojo.dto.AyFaceDispositionDto;
import com.relytosoft.mizar.analyze.face.api.pojo.query.AyFaceSearchQuery;
import com.relytosoft.mizar.analyze.face.api.pojo.vo.AyFaceDispositionVo;

import java.util.List;
import java.util.Map;

/**
 * @author lj
 * @date 2022/5/16 12:00
 */
public interface AyFaceDispositionService extends IService<AyFaceDisposition> {
    /**
     * 分页条件查询人脸布控任务
     *
     * @param pageQuery         分页参数
     * @param ayFaceDisposition 查询条件
     * @return 人脸布控任务数据
     */
    IPage<AyFaceDisposition> selectAyFaceDispositionPageList(PageQuery pageQuery, AyFaceDisposition ayFaceDisposition);


    /**
     * 封装布控任务信息
     *
     * @param ayFaceDispositionDto 布控任务基础数据
     * @return 需要添加的布控信息
     */
    List<AyFaceDisposition> getAyFaceDispositionInfo(AyFaceDispositionDto ayFaceDispositionDto);


    /**
     * 添加人脸布控任务
     *
     * @param ayFaceDispositionList 需要添加的布控任务
     * @return 添加成功的后的数据
     */
    List<AyFaceDisposition> addAyFaceDisposition(List<AyFaceDisposition> ayFaceDispositionList);


    /**
     * 发送添加布控任务信息到kafka
     *
     * @param ayFaceDispositionList 需要添加的布控信息
     */
    void sendAddInfoToKafka(List<AyFaceDisposition> ayFaceDispositionList);

    /**
     * 人脸布防详情
     *
     * @param faceDispositionId 人脸布防ID
     * @return 人脸布防详情
     */
    AyFaceDispositionVo selectAyFaceDispositionById(Integer faceDispositionId);


    /**
     * 修改人脸布防信息
     *
     * @param ayFaceDispositionDto 人脸布防信息
     * @return 是否成功
     */
    boolean updateAyFaceDisposition(AyFaceDispositionDto ayFaceDispositionDto);


    /**
     * 删除人脸布控
     *
     * @param faceDispositionIds 布控id集合
     * @return map  删除的失败的信息
     */
    Map<Integer, String> removeAyFaceDisposition(List<Integer> faceDispositionIds);

    /**
     * 开始任务
     *
     * @param id 需要开始的的任务id
     * @return息
     */
    String startTask(Integer id);


    /**
     * 停止任务
     *
     * @param id 需要停止的任务id
     * @return 是否成功消
     */
    boolean stopTask(Integer id);

    /**
     * 批量布防撤防
     *
     * @param list 需要撤防布防的id
     */
    boolean armedAndDisarmed(List<Integer> list);

    /**
     * 人脸检索
     *
     * @param
     * @return
     */
    JSONObject faceSearch(AyFaceSearchQuery ayFaceSearchQuery, PageQuery pageQuery);


    boolean addTempFace(AyFaceDispositionDto ayFaceDispositionDto);
}
